// 表示当前高亮的节点

/**
 * 仿 google suggest designed by jquery1.4.2
 * 
 * @author fc
 * @param {}
 *            inputFieldId 输入框id
 * @param {}
 *            defaultWidth 提示层默认宽度 为空时默认与输入框宽度一致
 * @param {}
 *            defaultHeight 提示层默认高度
 * @param {}
 *            type 1:药品 2:疾病
 * @param {}        
 * 			  fildId,需填充的id
 */
 
function suggest(inputFieldId, defaultWidth, defaultHeight, type,fildId,dataUrl) {
	var highlightindex = -1;
	var timeoutId;
	var suggestResLen;
	var suggestDivHtml;
	var wordInput = $("#" + inputFieldId);
	var wordInputOffset = wordInput.offset();
	var autoFlag = false;
	var a1 =false;
	var a2 =false;
	var fillFlag = false;
	var bodyHeight = $("body").height();
	
	
	$("#auto").mouseover(function(){
		a2 = true;
	}).mouseout(function(){
		a2 = false;
	}).focus(function(){
		a2 = true;
	}).blur(function(){
		a2 = false;
		checkHide();
	})
	
	
	
	
	// 添加键盘按下并弹起的事件
	wordInput.keyup(function(event) {
		// 处理文本框中的键盘事件
		var myEvent = event || window.event;
		var keyCode = myEvent.keyCode;
		// 如果输入的是字母，退格，delete，空格或者数字键，应该将文本框中的最新信息发送给服务器,其中，空格键和数字键的加入使得输入中文也能支持~~
		if ((keyCode >= 65 && keyCode <= 90)
				|| (keyCode >= 48 && keyCode <= 57)
				|| (keyCode >= 96 && keyCode <= 105) || keyCode == 46
				|| keyCode == 8 || keyCode == 32) {
			// 获取文本框的内容
			var wordText = $("#" + inputFieldId).val();
			wordText = wordText.toUpperCase();
			$("#" + inputFieldId).val(wordText);
			var autoNode = $("#auto");
			if (wordText != "" && wordText.length >= 1) {
				// 将文本框中的内容发送到服务器端
				// 对上次未完成的延时操作进行取消
				clearTimeout(timeoutId);
				// 对于服务器端进行交互延迟500ms，避免快速打字造成的频繁请求
				timeoutId = setTimeout(function() {
					var anysisUrl = basePath + "dataDic/buidWordAutoXml.action?type="
									+ type + "&word="
									+ encodeURIComponent(wordText)
					if(null!=dataUrl&&dataUrl!=undefined&&dataUrl!=""){
						if(dataUrl.indexOf("?")==-1)
							anysisUrl = basePath+dataUrl+"?word="+ encodeURIComponent(wordText)+"&t="+(new Date().getTime().toString(36));
						else
							anysisUrl = basePath+dataUrl+"&word="+ encodeURIComponent(wordText)+"&t="+(new Date().getTime().toString(36));
					}
					$.get(	anysisUrl, function(
									data) {
									fillFlag = false;
								// 隐藏自动补全框并通过CSS设置补全框的位置大小及样式
								var autoWidth = wordInput.outerWidth() + "px";
								if (defaultWidth != "")
									autoWidth = defaultWidth;
								
								var topP = $("#" + inputFieldId).offset().top
												+ wordInput.outerHeight()
												+ "px";
								$("#auto").hide().css("border",
										"1px black solid").css("position",
										"absolute").css("background-color",
										"white").css(
										"top",topP
										).css("left",
										$("#" + inputFieldId).offset().left)
										.width(autoWidth).css("overflow-y",
												"auto").css("overflow-x",'hidden'); // 此处可根据自己的网页布局以及页面元素大小调整。
								var rightW = Math.floor($("#auto").width()*0.65);
								if (defaultHeight != "")
									$("#auto").height(defaultHeight);
								// 将dom对象data转换成JQuery的对象
								var jqueryObj = $(data);
								// 先找到所有的word节点
								var wordNodes = jqueryObj.find("word");
								// 遍历所有的word节点，取出单词内容将单词内容添加到弹出框中

								autoNode.html(" ");
								wordNodes.each(function(i) {
									// 获取单词内容
									var wordNode = $(this);
									var strArray = wordNode.text().split("@");
									if(strArray[0] == wordText){
										suggestDivHtml = "";
										if(null!=fildId&&fildId!=undefined){
											fildId(strArray[1])
											fillFlag = true;
										}
										if(inputSuggestFlag!=undefined)
											inputSuggestFlag = true;
									}
									// 新建div节点将单词内容加入到新建的节点中,将新建的节点加入到弹出框的节点中
									var newDivNode = $("<div>").attr("id", i).attr("name",strArray[0]).css("height","20px").attr("title",strArray[1]).css({"display":"-moz-inline-box","display":"inline-block","line-height":"20px"});
									newDivNode.html('<table width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td width="30%">'+strArray[1]+'</td><td width="70%" align="left"><div style="width:'+rightW+'px;overflow:hidden;background: none;"><nobr>'+strArray[0]+'</nobr></div></td></tr></table>')
											.appendTo(autoNode);
									newDivNode.css("width", "100%")
									// 增加鼠标进入事件，高亮节点;
									newDivNode.mouseover(function() {
												if (highlightindex != -1) {
													$("#auto")
															.children("div")
															.eq(highlightindex)
															.css(
																	"background-color",
																	"white");
												}
												highlightindex = $(this)
														.attr("id");
														
												$(this).css("background-color",
														"#B9DFEE");
														 autoFlag = true;
											});
									// 增加鼠标移出事件，取消当前高亮节点
									newDivNode.mouseout(function() {
												$(this).css("background-color",
														"white");
														autoFlag = false;
											});
									// 增加鼠标点击事件，可以进行补全
									newDivNode.click(function() {
												var comText = $(this).attr("title");
												$("#auto").hide();
												highlightindex = -1;
												$("#" + inputFieldId)
														.val(comText);
												suggestResLen = -1;
												suggestDivHtml = "";
												if(null!=fildId&&fildId!=undefined){
													fildId($(this).attr("name"))
													fillFlag = true;
												}
												if(inputSuggestFlag!=undefined)
													inputSuggestFlag = true;
											});

								});
								// 如果服务器端有数据返回，则显示弹出框
								if (wordNodes.length > 0) {
									suggestResLen = wordNodes.length;
									suggestDivHtml = autoNode.html();
									var tempH = (wordInput.outerHeight(true)+wordInput.position().top+parseInt(defaultHeight.substring(0,defaultHeight.length-2),10));
									if(tempH>bodyHeight){
										topP = $("#" + inputFieldId).offset().top-parseInt(defaultHeight.substring(0,defaultHeight.length-2),10)+"px";
									}
									autoNode.css("top",topP).show();
								} else {
									suggestResLen = -1;
									autoNode.hide();
									highlightindex = -1;
									suggestDivHtml = "";
								}
							}, "xml");
				}, 500);

			} else {
				autoNode.hide();
				highlightindex = -1;
			}
		} else if (keyCode == 38 || keyCode == 40) {
			// 如果输入的是向上38向下40按键
			if (keyCode == 38) {
				// up
				
				var autoNodes = $("#auto").children("div");
				
				if (highlightindex != -1) {
					autoNodes.eq(highlightindex).css("background-color",
							"white");
					highlightindex--;
				} else {
					highlightindex = autoNodes.length - 1;
				}

				if (highlightindex == -1) {
					// 如果修改索引值以后index变成-1，则将索引中指向最后一个元素
					highlightindex = autoNodes.length - 1;
				}
				// 让现在被高亮的内容变成绿色
				autoNodes.eq(highlightindex).css("background-color", "#B9DFEE");
				
				try{
				if((autoNodes.eq(highlightindex).position().top)<0){
					$("#auto").animate({scrollTop:($("#auto").scrollTop()+autoNodes.eq(highlightindex).position().top)+"px"}, 200);
				}else{
					if(highlightindex==(autoNodes.length-1))
					$("#auto").animate({scrollTop:(autoNodes.eq(highlightindex).position().top)+"px"}, 200);
				}
				}catch(e){}
			}
			if (keyCode == 40) {
				// down
				var autoNodes = $("#auto").children("div");
				if (highlightindex != -1) {
					autoNodes.eq(highlightindex).css("background-color",
							"white");
				}
				highlightindex++;
				if (highlightindex > autoNodes.length) {
					// 如果修改索引值以后index变成-1，则将索引中指向第一个元素
					highlightindex = 0;
				}
				// 让现在被高亮的内容变成绿色
				autoNodes.eq(highlightindex).css("background-color", "#B9DFEE");
				try{
				if((autoNodes.eq(highlightindex).position().top+autoNodes.eq(highlightindex).outerHeight(true))>$("#auto").outerHeight()){
					$("#auto").animate({scrollTop:($("#auto").scrollTop()+autoNodes.eq(highlightindex).outerHeight(true))+"px"}, 200);
				}else{
					$("#auto").animate({scrollTop:"0px"}, 200);
				}
				}catch(e){}
			}

		} else if (keyCode == 13) {
			// 如果按下的是回车

			// 下拉框有高亮的内容
			if (highlightindex != -1) {
				var obj = $("#auto").hide().children("div")
						.eq(highlightindex);
				var comText = obj.attr("title");
				highlightindex = -1;
				$("#" + inputFieldId).val(comText); // 将文本框内容改成选中项
				//$("form:first").submit(); // 提交form。若没有这句话，按下回车后，仅仅只改变了文本框里的内容，但是由于form本身就监控了回车按键默认为submit，提交的是文本框改变之前的内容，解决这个问题最简单的方式就是在文本框内容改变以后强制提交form的内容，此时，提交的内容就是选中项。
				if(null!=fildId&&fildId!=undefined){
					fildId(obj.attr("name"));
					fillFlag = true;
				}

			}
			// 下拉框没有高亮的内容
			else {

				$("#auto").hide();
				// 让文本框失去焦点
				$("#" + inputFieldId).get(0).blur();
			}
			suggestResLen = -1;
			suggestDivHtml = "";
			try{
				if(inputSuggestFlag!=undefined)
					inputSuggestFlag = true;
				wordInput.focus();
			}catch(e){}
		}
	
		wordInput.blur(function() {
			a1 = false;
			checkHide();
			if(!fillFlag&&!(dataUrl!=null&&dataUrl!=undefined&&dataUrl!="")){
				wordInput.val("");
			}
		})
		wordInput.change(function(){
			if(inputSuggestFlag!=undefined)
				inputSuggestFlag = false;
		})
	
		

		wordInput.focus(function() {
			a1 = true;
					if (suggestResLen != -1) {
						var autoNode = $("#auto");
						var topP = $("#" + inputFieldId).offset().top
										+ wordInput.outerHeight() + "px";
						var tempH = (wordInput.outerHeight(true)+wordInput.position().top+parseInt(defaultHeight.substring(0,defaultHeight.length-2),10));
						if(tempH>bodyHeight){
							topP = $("#" + inputFieldId).offset().top-parseInt(defaultHeight.substring(0,defaultHeight.length-2),10)+"px";
						}
						autoNode.css(
								"top",topP
								).css(
								"left", $("#" + inputFieldId).offset().left)
						//autoNode.html(suggestDivHtml);
						autoNode.show();
						var keyCode = myEvent.keyCode;
						var autoNodes = autoNode.children("div");
						if (keyCode == 38 || keyCode == 40) {
							// 如果输入的是向上38向下40按键
							if (keyCode == 38) {
								// up
								if (highlightindex != -1) {
									autoNodes.eq(highlightindex).css(
											"background-color", "white");
									highlightindex--;
								} else {
									highlightindex = autoNodes.length - 1;
								}

								if (highlightindex == -1) {
									// 如果修改索引值以后index变成-1，则将索引中指向最后一个元素
									highlightindex = autoNodes.length - 1;
								}
								// 让现在被高亮的内容变成绿色
								autoNodes.eq(highlightindex).css(
										"background-color", "#B9DFEE");
							}
							if (keyCode == 40) {
								// down
								if (highlightindex != -1) {
									autoNodes.eq(highlightindex).css(
											"background-color", "white");
								}
								highlightindex++;
								if (highlightindex > autoNodes.length) {
									// 如果修改索引值以后index变成-1，则将索引中指向第一个元素
									highlightindex = 0;
								}
								// 让现在被高亮的内容变成绿色
								autoNodes.eq(highlightindex).css(
										"background-color", "#B9DFEE");
							}
						} else if (keyCode == 13) {
							// 如果按下的是回车
							
							// 下拉框有高亮的内容
							if (highlightindex != -1) {
								var obj = autoNode.hide().children("div")
										.eq(highlightindex);
								var comText = obj.text();
								highlightindex = -1;
								$("#" + inputFieldId).val(comText); // 将文本框内容改成选中项
								//$("form:first").submit(); // 提交form。若没有这句话，按下回车后，仅仅只改变了文本框里的内容，但是由于form本身就监控了回车按键默认为submit，提交的是文本框改变之前的内容，解决这个问题最简单的方式就是在文本框内容改变以后强制提交form的内容，此时，提交的内容就是选中项。
								if(null!=fildId&&fildId!=undefined){
									fildId(obj.attr("name"));
									fillFlag = true;
								}

							}
							// 下拉框没有高亮的内容
							else {
								autoNode.hide();
								// 让文本框失去焦点
								$("#" + inputFieldId).get(0).blur();
							}
							suggestResLen = -1;
							suggestDivHtml = "";
							try{
								if(inputSuggestFlag!=undefined)
									inputSuggestFlag = true;
								wordInput.focus();
							}catch(e){}
						}
						 $("#auto div").mouseover(function() {
						 if (highlightindex != -1) {
						 autoNodes
						 .eq(highlightindex)
						 .css(
						 "background-color",
						 "white");
						 }
						 highlightindex = $(this)
						 .attr("id");
						 $(this).css("background-color",
						 "#B9DFEE");
						 autoFlag = true;
						 });
						 // 增加鼠标移出事件，取消当前高亮节点
						 $("#auto div").mouseout(function() {
						 $(this).css("background-color",
						 "white");
						 autoFlag = false;
						 });
						 // 增加鼠标点击事件，可以进行补全
						 $("#auto div").click(function() {
						 var comText = $(this).text();
						 autoNode.hide();
						 highlightindex = -1;
						 $("#" + inputFieldId).val(comText);
						 suggestResLen = -1;
						 suggestDivHtml = "";
						 if(null!=fildId&&fildId!=undefined){
							fildId($(this).attr("name"));
							fillFlag = true;
						 }
						 if(inputSuggestFlag!=undefined)
							inputSuggestFlag = true;
						 });

					}
				})

	});

		function checkHide(){
			if(!a2&&!a1){
				var autoNode = $("#auto")
				if(!autoFlag){
					autoNode.hide();
					//autoNode.html("");
				}
			}
		}
	
}


